package demo2;

// 定义抽象类，包含一些通用的属性和方法
// 导入 Scanner 类，用于从控制台读取用户输入
import java.util.Scanner;

/**
 * 抽象类 Person，实现了 AttendanceInfo 接口，用于表示人员信息，包含通用的属性和方法
 */
abstract class Person implements AttendanceInfo {
    // 姓名
    // 用于存储人员的姓名
    String name;
    // 身份标识
    // 用于存储人员的身份标识，如学号、工号等
    String id;
    // 出勤情况
    // 用于记录人员是否出勤，true 表示出勤，false 表示未出勤
    boolean isPresent;
    // 请假次数
    // 用于记录人员的请假次数
    int leaveCount;
    // 公假次数
    // 用于记录人员的公假次数
    int officialLeaveCount;

    /**
     * 输入基础信息的通用实现
     * 该方法从控制台读取用户输入的姓名和身份标识，并赋值给相应的属性
     */
    @Override
    public void inputBasicInfo() {
        // 创建 Scanner 对象，用于从控制台读取用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入姓名
        System.out.print("请输入姓名: ");
        // 读取用户输入的姓名并赋值给 name 属性
        name = scanner.nextLine();
        // 提示用户输入身份标识
        System.out.print("请输入身份标识: ");
        // 读取用户输入的身份标识并赋值给 id 属性
        id = scanner.nextLine();
    }

    /**
     * 输入出勤信息的通用实现
     * 该方法从控制台读取用户输入的出勤情况，并赋值给相应的属性
     */
    @Override
    public void inputAttendance() {
        // 创建 Scanner 对象，用于从控制台读取用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入是否出勤，要求输入 true 或 false
        System.out.print("是否出勤 (true/false): ");
        // 读取用户输入的布尔值并赋值给 isPresent 属性
        isPresent = scanner.nextBoolean();
    }

    /**
     * 输入请假信息的通用实现
     * 该方法从控制台读取用户输入的请假次数，并赋值给相应的属性
     */
    @Override
    public void inputLeave() {
        // 创建 Scanner 对象，用于从控制台读取用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入请假次数
        System.out.print("请输入请假次数: ");
        // 读取用户输入的整数并赋值给 leaveCount 属性
        leaveCount = scanner.nextInt();
    }

    /**
     * 输入公假信息的通用实现
     * 该方法从控制台读取用户输入的公假次数，并赋值给相应的属性
     */
    @Override
    public void inputOfficialLeave() {
        // 创建 Scanner 对象，用于从控制台读取用户输入
        Scanner scanner = new Scanner(System.in);
        // 提示用户输入公假次数
        System.out.print("请输入公假次数: ");
        // 读取用户输入的整数并赋值给 officialLeaveCount 属性
        officialLeaveCount = scanner.nextInt();
    }
}
